package com.lmf.mvc.filter;


import javax.servlet.*;
import java.io.IOException;

public class MyFilter implements Filter {

    //定义一个变量，接收初始化的值
    private static String encoding=null;

    //初始化
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        //接收web.xml配置文件中的初始参数
        encoding=filterConfig.getInitParameter("encoding");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("经过过滤器doFilter()方法。。。。。。。。。。。。");
        if (encoding != null) {
            // 设置字符编码链锁
            /**
             *  （1）request.setCharacterEncoding()：是设置从request中取得的值或从数据库中取出的值的编码格式；
             *
             *      指定后可以通过getParameter()则直接获得正确的字符串，如果不指定，则默认使用iso8859-1编码。
             *      值得注意的是在执行setCharacterEncoding()之前，不能执行任何getParameter()。
             *      而且，该指定只对POST方法有效，对GET方法无效。
             *      分析原因，应该是在执行第一个getParameter()的时候，
             *      Java将会按照编码分析所有的提交内容，而后续的getParameter()不再进行分析，所以setCharacterEncoding()无效。
             *      而对于GET方法提交表单是，提交的内容在URL中，一开始就已经按照编码分析提交内容，setCharacterEncoding()自然就无效。
             */
            request.setCharacterEncoding(encoding);
            /**
             * response.setContentType("text/html;charset=" + encoding)：
             *      作用一：指定前端浏览器响应需要的编码格式；
             *      作用二：并且自动修改浏览器显示的编码格式.。
             */
            response.setContentType("text/html;charset=" + encoding);
        }
        chain.doFilter(request,response);
    }

    @Override
    public void destroy() {
        encoding=null;
    }
}
